package handler

import (
	"chat/dao"
	"chat/pkg"
	"chat/request"
	"github.com/gin-gonic/gin"
)

func Login(c *gin.Context) {
	var data request.Login

	if err := c.ShouldBind(&data); err != nil {
		c.JSON(200, gin.H{
			"code": 1000,
			"msg":  err.Error(),
			"data": nil,
		})
		return
	}
	user, err := dao.GetUser(data.Username, data.Password)
	if err != nil {
		c.JSON(200, gin.H{
			"code": 1000,
			"msg":  err.Error(),

			"data": nil,
		})
		return
	}

	if user.ID == 0 {
		err = dao.CreateUser(data.Username, data.Password)
		if err != nil {
			c.JSON(200, gin.H{
				"code": 1000,
				"msg":  err.Error(),
				"data": nil,
			})
			return
		}
	}

	claims := pkg.CustomClaims{
		ID: user.ID,
	}

	token, err := pkg.NewJWT("2209a").CreateToken(claims)
	if err != nil {
		c.JSON(200, gin.H{
			"code": 1000,
			"msg":  err.Error(),
			"data": nil,
		})
		return
	}

	c.JSON(200, gin.H{
		"code": 200,
		"msg":  "ok",
		"data": token,
	})

}

func List(c *gin.Context) {
	var data request.List
	if err := c.ShouldBind(&data); err != nil {
		c.JSON(200, gin.H{
			"code": 1000,
			"msg":  err.Error(),
			"data": nil,
		})
		return
	}
	user, err := dao.ListUser()
	if err != nil {
		c.JSON(200, gin.H{
			"code": 1000,
			"msg":  err.Error(),
			"data": nil,
		})
		return
	}
	c.JSON(200, gin.H{
		"code": 200,
		"msg":  "ok",
		"data": user,
	})
}
